perm filename HMATCH.124[AID,LSP]1 blob
sn#656531 filedate 1982-05-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 2 Way Matcher
C00011 ENDMK
C⊗;
;;; 2 Way Matcher
;;; Here are the macros which define the simple hunk structure case
(DECLARE (FASLOAD STRUCT FAS DSK (MAC LSP)))
(DECLARE (SETQ DEFMACRO-FOR-COMPILING ()))
(DEFSTRUCT MSTATE
CURRENT-OBJECT
STACK
(PUNTED ())
(NULLP ())
(ATOMIC ())
H-STRUCT
(SIZE 0)
(CURRENT-INDEX 0) )
(DEFUN %%ADVANCE (N SIZE)
(COND ((= N (1- SIZE)) 0)
(T (1+ N))))
(DEFUN P-ATOMIC (X)
(ATOMIC X))
(DEFUN P-CURRENT-ATOMIC (X)
(NOT (HUNKP (CURRENT-OBJECT X))))
(DEFUN P-UNDECOMPOSABLE (X)
(OR (NULL X)(ATOM X)(NULLP X) (ATOMIC X)))
(DEFMACRO P-CURRENT (X)
`(CURRENT-OBJECT ,X))
(DEFMACRO P-CURRENT-OBJECT (X)
`(CURRENT-OBJECT ,X))
(DEFUN P-ADVANCE (X)
(COND ((PUNTED X)
(MAKE-MSTATE NULLP (NULL X)
ATOMIC ()
STACK (CDR (STACK X))
PUNTED T
CURRENT-OBJECT (CAR (STACK X))
SIZE (SIZE X)
CURRENT-INDEX 0
H-STRUCT ()))
(T (LET ((N (%%ADVANCE (CURRENT-INDEX X)
(SIZE X))))
(MAKE-MSTATE NULLP (= 0 (CURRENT-INDEX X))
ATOMIC ()
STACK ()
PUNTED ()
CURRENT-OBJECT (CXR N (H-STRUCT X))
SIZE (SIZE X)
CURRENT-INDEX N
H-STRUCT (H-STRUCT X))))))
(DEFMACRO P-VAR-TYPE (ATOM)
;; returns the 1st character of a P-atomic object
`(COND ((EQ (TYPEP ,ATOM) 'SYMBOL) (GETCHAR ,ATOM 1.))))
(DEFMACRO P-CHANGE-CURRENT (X Y) `(PROGN (SETF (CURRENT-OBJECT ,X) ,Y)
,X))
(DEFUN P-CHANGE (X Y)
(COND ((HUNKP Y)
(MAKE-MSTATE NULLP ()
ATOMIC ()
STACK ()
PUNTED ()
CURRENT-OBJECT (CXR 1 Y)
SIZE (HUNKSIZE Y)
CURRENT-INDEX 1
H-STRUCT Y))
(T
(MAKE-MSTATE NULLP (NULL Y)
ATOMIC T
STACK ()
PUNTED ()
CURRENT-OBJECT Y
SIZE 0
CURRENT-INDEX 0
H-STRUCT ())) ))
(DEFMACRO P-RESTRICT-VAR (X) `(CADR ,X))
(DEFUN P-MAP-BUILD (FUN H)
(COND ((NULLP H) ())
(T (CONS (FUNCALL FUN (CURRENT-OBJECT H))
(P-MAP-BUILD FUN (P-ADVANCE H))))))
(DEFMACRO P-CURRENT-EMPTY (X) `(NULL (CURRENT-OBJECT ,X)))
(DEFMACRO P-EMPTY (X) `(NULLP ,X))
(DEFUN P-LISTIFY (X)
(COND ((NULLP X) ())
((PUNTED X) (STACK X))
(T (LET ((SIZE (SIZE X))
(H (H-STRUCT X)))
(DO ((I (CURRENT-INDEX X) (%%ADVANCE I SIZE))
(A ()))
((= 0 I) (CONS (CXR 0 H) (NREVERSE A)))
(PUSH (CXR I H) A))))))
(DEFUN P-LISTIFY-REST (X)
(COND ((NULLP X) ())
((PUNTED X) (STACK X))
(T (LET ((SIZE (SIZE X))
(H (H-STRUCT X)))
(DO ((I (%%ADVANCE (CURRENT-INDEX X) SIZE)
(%%ADVANCE I SIZE))
(A ()))
((= 0 I) (CONS (CXR 0 H) (NREVERSE A)))
(PUSH (CXR I H) A))))))
(DEFMACRO P-RESTRICT-FUNS (X) `(CDDR ,X))
(DEFMACRO P-RESTRICTP (%/#X) `(AND (EQ (TYPEP ,%/#X) 'LIST)
(MEMQ (CAR ,%/#X)
'($R RESTRICT ⊗R $IR IRESTRICT ⊗IR))))
(DEFMACRO P-IRESTRICTP (%/#X) `(AND (EQ (TYPEP ,%/#X) 'LIST)
(MEMQ (CAR ,%/#X)
'($IR IRESTRICT ⊗IR))))
(DEFMACRO P-FRESTRICTP (%/#X) `(AND (EQ (TYPEP ,%/#X) 'LIST)
(MEMQ (CAR ,%/#X)
'($R RESTRICT ⊗R))))
(DEFMACRO P-RESTRICT-VAR (X) `(CADR ,X))
(DEFMACRO P-RESTRICT-TYPE (X) `(CAR ,X))
(DEFMACRO P-CREATE-RESTRICTION (X Y Z)
`(CONS ,X (CONS ,Y ,Z)))
(DEFUN P-ADD-ITEM (X ITEM)
(MAKE-MSTATE
CURRENT-OBJECT ITEM
STACK (CONS (CURRENT-OBJECT X) (STACK X))
PUNTED (PUNTED X)
NULLP ()
ATOMIC (ATOMIC X)
H-STRUCT (H-STRUCT X)
SIZE (SIZE X)
CURRENT-INDEX (CURRENT-INDEX X)))
(DEFUN P-ADD-ITEMS (X ITEMS)
(MAKE-MSTATE
CURRENT-OBJECT (CAR ITEMS)
STACK (APPEND (CDR ITEMS)
(CONS (CURRENT-OBJECT X) (STACK X)))
PUNTED (PUNTED X)
NULLP ()
ATOMIC (ATOMIC X)
H-STRUCT (H-STRUCT X)
SIZE (SIZE X)
CURRENT-INDEX (CURRENT-INDEX X)))
(DEFUN P-REST-EMPTY (X)
(COND ((NULLP X) T)
((PUNTED X) (NULL (STACK X)))
(T (= (CURRENT-INDEX X) 0))))
(DEFUN P-CREATE-STATE (X)
(MAKE-MSTATE NULLP ()
ATOMIC ()
STACK ()
PUNTED ()
CURRENT-OBJECT (CXR 1 X)
SIZE (HUNKSIZE X)
CURRENT-INDEX 1
H-STRUCT X)))
(DEFUN P-CHANGE-CURRENT-ITEMS (X ITEMS)
(SETF (NULLP X) ())
(SETF (STACK X)
(APPEND (CDR ITEMS) (STACK X)))
(SETF (CURRENT-OBJECT X) (CAR ITEMS))
X)
(DEFUN P-CREATE-NULL-STATE ()
(MAKE-MSTATE NULLP T
ATOMIC ()
STACK ()
PUNTED T
CURRENT-OBJECT ()
SIZE 0
CURRENT-INDEX 0
H-STRUCT ()))
(DEFUN P-CREATE-STATE-FROM-CURRENT (X)
(LET ((Y (CURRENT-OBJECT X)))
(COND ((HUNKP Y)
(MAKE-MSTATE NULLP ()
ATOMIC ()
STACK ()
PUNTED ()
CURRENT-OBJECT (CXR 1 Y)
SIZE (HUNKSIZE Y)
CURRENT-INDEX 1
H-STRUCT Y))
(T
(MAKE-MSTATE NULLP (NULL Y)
ATOMIC T
STACK ()
PUNTED ()
CURRENT-OBJECT Y
SIZE 0
CURRENT-INDEX 0
H-STRUCT ())) )))
(DEFMACRO P-CHECK (X) X)
(EVAL-WHEN (COMPILE EVAL)
(SSTATUS FEATURES SYMMETRIC))
(INCLUDE "GMATCH.125")